package club.xyes.zkh.ecommerce.service;

import club.xyes.zkh.ecommerce.commons.entity.Commodity;
import club.xyes.zkh.ecommerce.commons.entity.Shop;
import com.github.pagehelper.PageInfo;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

/**
 * Create by 郭文梁 2019/4/17 0017 10:23
 * CommodityService
 * 商品相关业务行为定义
 *
 * @author 郭文梁
 * @data 2019/4/17 0017
 */
public interface CommodityService extends BaseService<Commodity> {
    /**
     * 根据商品分类查询商品
     *
     * @param classificationId 分类ID
     * @param page             页码
     * @param rows             每页大小
     * @return 商品列表
     */
    PageInfo<Commodity> findByClassificationId(Integer classificationId, Integer page, Integer rows);

    /**
     * 创建新的商铺信息
     *
     * @param commodity      商品
     * @param frontCoverFile 封面文件
     * @return Commodity对象
     * @throws IOException IO异常
     */
    Commodity create(Commodity commodity, MultipartFile frontCoverFile) throws IOException;

    /**
     * 设置商品封面图片
     *
     * @param commodity 商品对象
     * @param coverFile 封面图片文件
     * @return 商品对象
     * @throws IOException IO异常
     */
    Commodity setFrontCover(Commodity commodity, MultipartFile coverFile) throws IOException;

    /**
     * 检查分类下是否存在商品
     *
     * @param classificationId 分类ID
     * @return 是否存在商品
     */
    boolean existsByClassificationId(Integer classificationId);

    /**
     * 通过商铺查询商品
     *
     * @param shop 商铺
     * @param page 页码
     * @param rows 每页大小
     * @return PageInfo
     */
    PageInfo<Commodity> findByShop(Shop shop, Integer page, Integer rows);

    /**
     * 根据商铺ID和商品名称搜索商品
     *
     * @param shopId 商铺ID
     * @param name   商品名称 模糊匹配
     * @param page   页码
     * @param state  状态
     * @param rows   每页大小
     * @return PageInfo
     */
    PageInfo<Commodity> searchByShopIdAndStateAndName(Integer shopId, Integer state, String name, Integer page, Integer rows);
}
